<!DOCTYPE html> <html><!--
 Page saved with SingleFile 
 url: https://berlinsaint.github.io/blog/2018/11/01/Mysql_On_Kubernetes%E5%BC%95%E5%8F%91%E7%9A%84TCP%E8%B6%85%E6%97%B6%E9%97%AE%E9%A2%98%E5%AE%9A%E4%BD%8D/ 
 saved date: Sat Jan 18 2020 21:30:11 GMT+0800 (China Standard Time)
--><meta charset=utf-8><meta name=generator content="Hexo 3.9.0">
<meta name=renderer content=webkit>
<meta http-equiv=X-UA-Compatible content="IE=edge">
<title>MYSQL On Kubernetes(IPVS)引发的TCP超时问题定位 | 君莫笑的博客</title>
<meta name=viewport content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name=description content="MYSQL On Kubernetes(IPVS)引发的TCP超时问题定位背景 以下数据库上Kubernetes都是研发、测试环境，非生产环境  我们研测测试环境的数据库如 Mysql ，redis ，rabbitmq都以容器的方式在我们自研的paas平台上创建； 但是当我们把mysql已到k8s上时， 我们经常发现MYSQL 的error日志爆出如下错误:  然后我们的客户端则会经常报 Lost">
<meta name=keywords content="Go Python K8S LVS IPVS">
<meta property=og:type content=article>
<meta property=og:title content="MYSQL On Kubernetes(IPVS)引发的TCP超时问题定位">
<meta property=og:url content=https://berlinsaint.github.io/2018/11/01/Mysql_On_Kubernetes引发的TCP超时问题定位/index.html>
<meta property=og:site_name content=君莫笑的博客>
<meta property=og:description content="MYSQL On Kubernetes(IPVS)引发的TCP超时问题定位背景 以下数据库上Kubernetes都是研发、测试环境，非生产环境  我们研测测试环境的数据库如 Mysql ，redis ，rabbitmq都以容器的方式在我们自研的paas平台上创建； 但是当我们把mysql已到k8s上时， 我们经常发现MYSQL 的error日志爆出如下错误:  然后我们的客户端则会经常报 Lost">
<meta property=og:locale content=zh-CN>
<meta property=og:image content=https://berlinsaint.github.io/blog/img/mysqls-error.png>
<meta property=og:image content=https://berlinsaint.github.io/blog/img/mysql-err.png>
<meta property=og:image content=https://berlinsaint.github.io/blog/img/lvs-nat.png>
<meta property=og:image content=https://berlinsaint.github.io/blog/img/ipvs-3.png>
<meta property=og:image content=https://berlinsaint.github.io/blog/img/lnc-0.png>
<meta property=og:image content=https://berlinsaint.github.io/blog/img/lnc-1.png>
<meta property=og:image content=https://berlinsaint.github.io/blog/img/lnc-2.png>
<meta property=og:image content=https://berlinsaint.github.io/blog/img/lnc-err-2.png>
<meta property=og:image content=https://berlinsaint.github.io/blog/img/mysql-client-err.png>
<meta property=og:image content=https://berlinsaint.github.io/blog/img/42322.png>
<meta property=og:image content=https://berlinsaint.github.io/blog/img/systctl.png>
<meta property=og:image content=https://berlinsaint.github.io/blog/img/k8s_ctl.png>
<meta property=og:image content=https://berlinsaint.github.io/blog/img/after_600_tcp.png>
<meta property=og:updated_time content=2019-11-22T14:35:20.864Z>
<meta name=twitter:card content=summary>
<meta name=twitter:title content="MYSQL On Kubernetes(IPVS)引发的TCP超时问题定位">
<meta name=twitter:description content="MYSQL On Kubernetes(IPVS)引发的TCP超时问题定位背景 以下数据库上Kubernetes都是研发、测试环境，非生产环境  我们研测测试环境的数据库如 Mysql ，redis ，rabbitmq都以容器的方式在我们自研的paas平台上创建； 但是当我们把mysql已到k8s上时， 我们经常发现MYSQL 的error日志爆出如下错误:  然后我们的客户端则会经常报 Lost">
<meta name=twitter:image content=https://berlinsaint.github.io/blog/img/mysqls-error.png>
<link rel=alternative href=https://berlinsaint.github.io/atom.xml title=君莫笑的博客 type=application/atom+xml>
<style>:root{--sf-img-2:url("")}.mid-col,.tools-col{transition:all .2s ease-in;-ms-transition:all .2s ease-in}@-webkit-keyframes leftIn{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translateZ(0);transform:translateZ(0)}60%{-webkit-transform:translate3d(358px,0,0);transform:translate3d(358px,0,0)}75%{-webkit-transform:translate3d(323px,0,0);transform:translate3d(323px,0,0)}90%{-webkit-transform:translate3d(338px,0,0);transform:translate3d(338px,0,0)}to{-webkit-transform:translate3d(333px,0,0);transform:translate3d(333px,0,0)}}@keyframes leftIn{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translateZ(0);transform:translateZ(0)}60%{-webkit-transform:translate3d(358px,0,0);transform:translate3d(358px,0,0)}75%{-webkit-transform:translate3d(323px,0,0);transform:translate3d(323px,0,0)}90%{-webkit-transform:translate3d(338px,0,0);transform:translate3d(338px,0,0)}to{-webkit-transform:translate3d(333px,0,0);transform:translate3d(333px,0,0)}}@-webkit-keyframes leftOut{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(333px,0,0);transform:translate3d(333px,0,0)}60%{-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes leftOut{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(333px,0,0);transform:translate3d(333px,0,0)}60%{-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes smallLeftIn{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translateZ(0);transform:translateZ(0)}60%{-webkit-transform:translate3d(325px,0,0);transform:translate3d(325px,0,0)}75%{-webkit-transform:translate3d(290px,0,0);transform:translate3d(290px,0,0)}90%{-webkit-transform:translate3d(305px,0,0);transform:translate3d(305px,0,0)}to{-webkit-transform:translate3d(300px,0,0);transform:translate3d(300px,0,0)}}@keyframes smallLeftIn{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translateZ(0);transform:translateZ(0)}60%{-webkit-transform:translate3d(325px,0,0);transform:translate3d(325px,0,0)}75%{-webkit-transform:translate3d(290px,0,0);transform:translate3d(290px,0,0)}90%{-webkit-transform:translate3d(305px,0,0);transform:translate3d(305px,0,0)}to{-webkit-transform:translate3d(300px,0,0);transform:translate3d(300px,0,0)}}@-webkit-keyframes smallleftOut{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(333px,0,0);transform:translate3d(333px,0,0)}60%{-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes smallleftOut{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(333px,0,0);transform:translate3d(333px,0,0)}60%{-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}body{margin:0;background-color:#fff;min-height:100%}article,aside,footer,header{display:block}a{background:transparent;text-decoration:none;color:#08c}a:active{outline:0}img{border:0;vertical-align:middle}h1,h2{margin:0}li,ul{margin:0;padding:0}ul{list-style:none outside none}*{box-sizing:border-box}@font-face{font-family:iconfont;src:url(data:font/woff;base64,d09GRgABAAAAADOIABAAAAAATPgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABbAAAABoAAAAcd0s3oEdERUYAAAGIAAAAHQAAACAAXQAET1MvMgAAAagAAABHAAAAVlepW5JjbWFwAAAB8AAAAO0AAAJaVWxZZGN2dCAAAALgAAAAGAAAACQNZf5KZnBnbQAAAvgAAAT8AAAJljD3npVnYXNwAAAH9AAAAAgAAAAIAAAAEGdseWYAAAf8AAAnKwAAOQyAgC0YaGVhZAAALygAAAAvAAAANg7S2HloaGVhAAAvWAAAACAAAAAkCHED5GhtdHgAAC94AAAAcwAAAK6YhQltbG9jYQAAL+wAAABiAAAAYmYBV3xtYXhwAAAwUAAAACAAAAAgAfMELW5hbWUAADBwAAABQQAAAjrsVWpWcG9zdAAAMbQAAAE8AAAByCF+2W1wcmVwAAAy8AAAAJUAAACVpbm+ZnicY2BgYGQAgjO2i86D6KttpzJgNABP+weWAAB4nGNgZGBg4ANiCQYQYGJgBEJ9IGYB8xgABk8AYgAAAHicY2Bk4WD8wsDKwME0k+kMAwNDP4RmfM1gzMjJwMDEwMbMAAOMAgwIEJDmmsLgwFDxopy54X8DQwxzA8NVkBqQHAANrwzjAHictY+9S4JhFMXv40egtBn0nDfBCESHxElwdBaRAid1d3YQG8PVza1B/wEXJxWcmiKqrX/A5TxOEcEruPT65BuCgYNgB+7HgcvvcEUkKH7FRdkuqmKd2viQyttZlIKEJWq3O4YZ4SnPCF4wwSsmmWGWORZZYpm3rLHBe3Y45IgzPvGdK34bMZcmZx7MxCwXbc/7SbEs2bBi1HtY1T2sxC/L9Vle1wk5Ch5WWMLFFz7xAQNijje84gXPeMQYA/TRQhMN1HGDa6SRQkS7uqdbOn8+9X8/ltSJbIEqYFvg78Ex03YV/D/0QVoD7op3KQAAAHicY2BAA0YMRswS/x8yN/zXhtEAQhQHtXicnVVpd9NGFJW8ZE/aksRQRNsxE6c0GpmwBQMuBCmyC+niQGgl6CInMV34A3zsZ/2ap9Ce04/8tN47XhJaek7bHEvvvpk7b9N7E3GMqOx5IK5RR0pe96Sy/lQq8bOkrutenijp9ZK6bKeekhZRK02VzMX9I7lEdS5WskmwScbrXqKeqzzvg9JLMqwoSyLaItrKvCxNU08cP021OL1kkKaBlIyCnUqjjxCqUS+Rqg5lSodevZ6KmwVSNhrxqKOiehAq7hzPOaWNOmCkcpXDXLFZbeR7Sdbz+o/SRKfY236cYMNj9CNXgVSMzMD2NB6HTyTT0V4iM5F/7LhOlIVSG1wAr2qwx6BK8aG48UG2E8jUeM3xdVGpNDIV57rPstksHY+VEOXB39ihlBu6v4Oz06aoVmNx+8AzBjkplCh6SBaADlOZp/YI2jy0QGaN+qPiHPB1CC+yEGUqz5Qs6FAHMmd295Ni2t1J12RxoF8GMm9295Ldx8NFr471Zbu+YApnMXqSFIuLEdyHMuunTLvUCEcZF3PAxTxe4ta0QsjIAoxKI8xRW/ie2ahrnB1jb3Qej9VTZNJF/N1Mfj04qVjhOMt6R9xInLvHruvCVSCLCKca7yeOLOpQZbD6+9KS6yw4YZhnxULFlxe+dxH5LzFuP5B3TOFSvmuKEuV7pihTnjFFhXIZhaVcMcUU5aoppilrppihPGuKWcpzRqb9f+n7ffg+hzPn4ZvSg2/KC/BN+QF8U34I35QfwTelgm/KOnxTXoRvSm3gbSlTEaqYsXT47SVataFqOTO4wD4PZM2I9kVvBNIwSnXVSSl1v6VV/iT566LHY+uTkro1aWyIu7pps/j4dMZvbl0y6oadq0+MI+WhPXT12DShU/vN4d/OXd0qLrmriGrDqDYimASANui3AvFN82w7EPOWXXz8QzAC1M+pNVRTde3UlRoP8ryruxie5MDjiGOgjeuursBLE1NWQ/PhZykyFfuDvKmVauewdflkWzWHNqTC2yL2lWScpu295FVJlZX3qrRePp+GIXp6FteEtmzdyaQSoVEzzvHwripF2ZGWctQ/QueXor4HnHF2QevDMe5E3UG1Nex0+PlmI2sLJoamtL0ToGQsXRVjUeVZnGN0DWsdb9wSnq6nJxbxKTaZj8JKdX2Uj24jzSt2WWbRqEp1dJf2WeyrNv0yO2hYHWc/aao27uphW40qUj1Vvga0B3ZW3fhQDys+6qBRVTXb6NrIYzQua8Z/DMhiXPnrRqsm0+/glmqnzWLNXUFz35gs904vb73JfivnppGm/1ajLSOX/RyO+W0R4N85KHZT1kC9NWmIcQHZCxgu1UTnDs3dxiDiOvsfndP9b83CIDmrbY3ZPPXh6ukokjtMeZxlm1nW9SjNUbSTxD5FYqvDicFNjeFYbsoGBuTuP6zfwz3griyLD7xtJIC4z9rEqJ7q4O4eVyM07Cu5DxiZY8e5DbAD4BLE5ti1Kx0Au9Il5w7AZ+QQPCCH4CE5BLvk3AT4nByCL8gh+JIcgq/IuQXQI4dgjxyCR+QQPCanDbBPDsETcgi+JofgG3JaAAk5BCk5BE/JIXhmZHNS5m+pyHWg7yy6AfS97RooW1B+MHJlws6oWHbfIrIPLCL10MjVCfWIiqUOLCL1uUWk/mjk2oT6ExVL/dkiUn+xiNQXxpeZgZTXei95Rwd/Aiu+rH4AAQAB//8AD3ictXsJfFxXee/5zrn7vXPvzNy5945GM6NZNDOSRos10sxo15U3yZZlWZJtWd5iJ7JsZ3PsQFbSmpAAWSCBBCgpJM5C0pdSMOURGmiI6Y++15aWpX0tJX2QBGjpDyiP96MtpS8ave/MyFmBF/reG83c5ezLd77v///OERFJ59qL7A9ZlLhkAxki8+QwXD993t61z99OgQTMADFXCDPBZIcJKAocDIKqaJJ6OASGJEjGYaIL+kkLFCIZirSPaLJIBV0TlsJgmoE5Egho5sbm6fMeljj9K0pUVG3l1ywyikXueHNFCitvqkx/5+uKgxUszwRl+T9W4NLSkt+2sDA8XOr1vIXDC4cP7BueH56f3lQt9w6VhrwN3oa5UG801Ob4tlsEqQgZkyYgXe7Pl/u7aRGctOhE3IhJs1K+CIW0jCkKmW46Cl5Girh9pUp/3pNkkyVhWCpVCt1QyBeg3D9Gh6HkJgCammML4Vw8zO4FLVpI3l7bTh8BpyVrmi1mqqu2rTORiTQ1pWzleiMcNgLh8N2KJOoCFSwzt2lul9/quaqoiqJUe0y0Ys4ftrTTFjCaCrEd7cG4EEg1h4++u98bGsp5KsDZs2A3p8wnxkOxEH7fFnPtVjMYUKKxQDZkR+D67+lR20jkv0sIEJ+Msy/S75EyKfk9TUCZB0BNIMD88oY0EdgYYZSdIBToCUwOJwghl/SV4pGYEMKhkiWZilIhX3arlWo+my/kK55bzReStA+fq66HfxV84KGVqiSXKlX2xWCvDeHat//135WTu3tiMXagXRIDXuI2Sco2BUYNMzvSf+rugAqBY1ccae8UR7yys1GkH0i3BRO1J9515i5BkguOJzl7NA2oUL6dGmL/+NTIxtbpIJXNG0YnJpMRGhtrtQEbSwA6175A/5JtJDky4JcBsBc+79RJGSSMlsiSiH2mMI03oLMCYF83YcYcyYTsUNgNKxEUgW7srAmu0yfJ2VC2P1jOlvv6y2OsOiYNAf26kZsyZErf40mnv7R7AWXQC2nhpmA2XIpuZhvfB2CGteJm84p0bWwcRje/V9R6+6ZLYc3SZZHV28kIWTsrEHaWyMQhCdLv9yY8l4GIrRVx6EVYwaYRIlKyhNPDYAa7xuYJA7bVdhzbDkqRIkm5QSmVD6IEQzAJqTEIdkPWLpSzoUgLwFEYe/HF2h+9CGfv+tEdd/wIXH696xNXv927hREe8SKMwdE7flT7wcXo1U9c9fdrJB65hVCybe3v2V+wzaSD7CAL/q7hISpLIwByxKZUdDCBUOxoZ4yIPpEIDq6M7SQUG72kgKiCQERhkXd0TsPm62zjjultk7nWXDrX3dqV1r1ila8kXHEMF1C5v9JX8hw5n81ITiQpeElwIlI2UyiL/baUrZY8vjhfncbtrfTJmYIbyt48uS21wWiOdpsTW246enp6Q3UqndeMmF3Qt2+95fj1B+kkSxWho4VetjA1nk20NMdpdifsbGVPvs9PtphOSA9J8Sl/ce8G81B7c5OOS1I2hfjUpv37t5oLp2EObgR2nB5ZioWPhLJdgRl8v6b2CYJDwOdwM86hRFSS8GMKBo1JokBBJKMoeeQSWZZVWaVmUQWxmvO6oOpRdfVnIJbhwSsAVg9ceoqdfeljH3u65S8e+OY3v0mwJLL2LZSLLAmRLKmSaXKQ3AZVP3fdwR0soF9/gMqBziKuwquvOsSs4OXLlx09IppU9MdBhfHp892on4+jYlRlTV0hqiKryjIxlJBihFZISFBCwjKRBFGQxBViUr74VxyQiWLIylKET1pQEJdIkFgsaC0RZmMKRpdQs+pzRNe1CZRCMh/GrukEVfexX68mzBSQ9cDSm6nxVfUs+ZWhgXxrJEzJ28/e8rbTp06s7N+3e2F2Zvu2rVs2TwxMD01Xyhu6Wqv5arI5nI1kDZWEaMg1i2I6U+jN91dRWNIlz43IUu4NIYD3XnxwpGw60wMY11eprof18rBCth6WQ/FznYicRaFFGZTLzeBiIqeXC2q+0MvkKn/oR83noKaMuCV8Qv0hsT97aSGg4CfAfi+CWkOufWf1kKHyAPpoPWB1Es7piiwreu2IroAsg2y8EmLI9RD6u6Z16DahKi5PWubDD1OAcEAJCI9okGk9/I6NlR2VfN+x95YyejXQG8gqakxRw1JADH9v/dGQwtCtqlEFVBWUqKr+HX/RNP64D2475EQizuQxVq1dXvuhwATBCCsyuALot31uY1WrqoXSe5dLme4tvQGuvyjpW/tv7K/obURA2d/oY2MlgaH4AvjT5/MohQblyneWrItKmPIFAdMXQ4FsWvLRyKGhU0PMKtqhdEgER8yV+9i52obaBvga/j1da4a//wf41Nv/4R/ejlmuWvswu48+iyVKn0b9nS/moKBCVQW0hDIltWfnwa9dmIcJmJivXQB//puveas9iykIatwrSIjdzW4izaSNlFC/7SVnyH3Q5k9oAMHbDlosjDjACF+61Iqqa3ywEBcEthFkYRMo8mbQ1NPVBDMl1T8UowaM/8a1ChGssZNpao42ENICWtAw0MMkbEDYWCYMcQtD+GJK5klCQmh4CCwFwIiAzgwdLZJAZEWQF4lCVEQ8S0SzQTI1aZEEg9YssSwtiEO471eVapEgWMGlN1e6JGnTRNOkWaxGk3AiOvct9vW979677rwVF9ipqy45fGD/4pl9Z/bu2T0/N7tzpm9H344Jf2y0JdrqOuEieK4sWTAOLSBlZZeLezlfkPmtYjO8FexywSt5crUeh/Aob/P7KOQrLZjNKzmytx5RqMpOtRTJyl7VzsiFXNWL9LkWloxV5BFb5Pv7EFPo9Srrf5jdfW2lspSpViB2SNHDrnlT9wRjwke7WSLBrJG9R+WbfFkomYIizAuMOSfkprAed9l1esIUgEmlxxKTgisIhbAm6LJgffw+Wb9H+B1zc7EJvNZpgckJQZCvlWVBSAlCLsOEe/bLumsyQZYf6PYV5UuTcmtccIY0t5iSZTbFrh3FZeuE5VJZFuREKiGz8EiYzc4r1gO1Wu3BUkXXQbzn7SlBvjvVVLQ0Zzas1RZSrhb+0aQELCUXCnL6w60lnHTLlL8hLMmmfEyBIa3JLHTjwmz983uWpwVFLjUxhYZteBzGK0yRHUHWZV6pXkinwsyZTghaUwVr+RBO+8DaBXahjjUs4pEWUkTLsgltyyn/yvGxwQEBjL5SV6eg4IykU4IqM59DqQCKETFIgBmBJVzmosUVtUksybSWNJB0kFVu9VGqFHUPYYzOEUo1tnF6++TWjRMjw6iUezraI3bjEw56RdJfKbkRKeO+7i6t38Ve/sBVaiafe9Uze9UzXU8LZ6cvn56+/I/r12O5Si5X+UCunM+Xa1+uv+RqP8mXcxiSGpwdGJgd3Ncx0tExQr/Mk0/n6tffraf7QT3VhuZcrhl/d/F7LJ+nQ4XBwULbwEDt33m+DtKw951omztRExXItX4E4TdNOhQnBQ0+8xH+0LHp8zFUAM0I8DClsCSh0hOJuAf1YmN4ABdyBosCRnF0X0klimSmnniOp9+y5IcZbc0mmqNu0DI0WmAF2SyGeiEj5yr9hVyDhnAk5IkcEXFeUhU5MOLh7MjmntocotxP9mzeePjwbYdpba7+tHFzD3ySYsBh1rnq9/6tETP+tpe/bgw0HjAoUM9BuJ4Mr32U/ZD+AUmTdtJLBskE2UeuJtt9FFSJ42oJ28rtO6JUkS7LiM8RAS5jVjQFAvYOIesMCgbMYXdhCyEnj+9ZGB8bHsICUx0xJViEDVUkDHIF17mJrAuJRGmMcRpWoFI3otMktJp4GYO8CY33CppYLgD4KvMoJBtJkCVkHjgAlXzuF4QV8vQ5K7Gw6c4MTSR37t8/P57vPXRu+dhjx7Y0t3R1Bp/916etR/716WDth+/cZV95+1zkd4p5BKh5vd0NBt0g/LDzzt1mWPCsd25KBsOiHpClqNLk1H5shgTP7PU0UWoEqobm9oCfPWgZXYl9jg2dE/sOXFLo3L+z1OHPTiZzlSYLar/trTzxTvz9oXv0zIR39MyDRqTQathtRYtXBxcGewzqxUPU3lNYLgZiEnVG7gzXQ+REIGPVQ1KTzaMoPENrz7IvskkyR64kN5Hv+9HtQ9SUrgNFPwSGwnzXsU1DlzSUylaUyq04IzgTZIUouqErxgqRDflkGDRigWYtcvReF0sxRImKBohIaEZ0xdRngjY1TWOOGIZuoABv+/UL4iU0Clt6uTDTQDnfcPVVu+eBXHv6mlNX3XT1TcePXXrkwNL8lbuv3LnDH6uWe7o62gqt6RZVFiiZg7mIWQQkY1zKi1CplivVSnedmTomQ4FoTHm1NAxOfVUM14nceqiLVgUfxqCHS48kIz7j5UAa11GIp/WcusyMU05NQhiTDfWFshmLFsrdAP92361B1w3+m4S9AzvVhFcm2R0pA3Q9ZOmDSLk2f5Kn+D3zvKnJuqcpH+ln4o1GOKAbTLtRw5RUZ/dbngf31f6ap/RE6siKqcEN+4KeV1uzv+3jyzYGLnzgBbfFi3cxXQxGhUhQMiGRGR5M6i2GofUPveCm3B/sk5OmI+z8uCLfY6pY+j1YC9DeKsZBnxtc/YblHQJXZQpc71m0PeiufgO+VcsqsKMEll3nGo8K72eHUMlHkQD3kp3kKPmcH8s1GUQAcnR285Cgst3zm5iuMn8B9NGGdhvBSA0nG1YQhCkaIPBXDE0xliWgBjMoW5GBqQZTl4lGVF1DyIGCwwmErqP0TLz57AbVjZ2vK8TQUWrswwcX90xvGx3OtuZaW/GXCXhF6F8nh3z6Xv3CfllEAR9N5JoeQndkonIVaeYY9JWS4EFEkr0CD4f1IAem49FoPh+NxuE/JTwrFrO8xLviXlM+3+TF4Yqky4Pc5G+F3aOPHApEbKs5G+wR721//NSz1xz79A1hmN+5KXVmb+HII4cPPXrk4KNH6Y1eIul6iXi09u1gU8wKxpqg7w1B/0z3fXCpqwNpN1Pptlve8hjm33E7otlNN5ZOjDu77nzszrm5u+bQlMyu/XehnR0kI2QXzuQZssufmfaTQUQLV22PhwRJoT6mEk5w+H0CWQCuAUVaEXGpaiAj8dhPJInuQjOl042jo2dOHz0yumt0dtuWXKGzuTWiR+o+IJfTIBwXiWPAEGraFuS2YwjrRrkjrBuQBOFrnSTVkxQyPJhK4LZQtw7XuqAQwuVYEUQ+9rjkGukLeWk9gKvwul8tA3ZAZCHdizpN86FQJBIJxzMZ+oW2XCEYDgWb3K2xghk3lbShxERraOvcrK4Pt7Wlw/SkHnHQ5spOR1Ptj2t/XIzYjkEvW/1nUxIDbe2KKJqRNBw3RTEQdoNtApUC4TTbETDU/ibRMFMhq1CoDRcyCTss2OF8a+vzz2eznptsaTItK5rGRTmwBQRxqNAalms/g7D99XsnA3lOborwpOviw6PBcEsibPb0qm5LJmRGwDbDmWzYCEmqN9FkB2xE84G1f6Kfp1eQADKR/unzHbi2AhT45KDpBJ1jBf2V90uWfNMygZjNVjMJQEAwizkc20oVKkmcGJAgU6hbSQ+4+YOJJssUQjAZLDYLodrTJvSHzdrTIaG5GITJkGBa/2aHOkzQTSHTYdb+xcAvvnSkRXwxO0J23Z9Gtq9dyZ6iP4D3wJMTH4TryHvIzWhrbiQ3kLeSt5BrUcpOk2vIcbQFOdQiDokQm4QRJgZQq0hooxDqYDlxZIkIJ2EfLMJeci/iBm4ZroVr4BRcDVfBlXAFXA4Hye+TT5EnyAPkw+S3yIfIB8kHsCwd036MPEYeJY+QB8lHyUfIbyPoBKKjzI3BKHmWfIE8g3VhGAwAjgbgGoc+KEEvbKjr+i7oxHnpgHZogxy0QhYykIYUSm4SEhCHZvLv5G/IX5O/In9Jvk6+Rr5KvkL+gvw5+TL5M/Kn5E/IfyX/hXRhmxVoIj8l38JeMXyTiQ8I7LBnj9dbM4JXBWLce4erbNzfpIHKu0lXCMU+6MuYBr/LBLClXOlhgeIyshDED0xCpSdJxwlRRQTmiANnOQ7cNBGDk3AcdsMCzMMcDMMQGKDgVIvkZ+SfyffJ98h3yXfIefJJ8jB5iPhkFIfdLNo9dJSOi+VxGW+tw7Ql57RojuxYzGkJJ6iFRrQnkLWMFgvDwLGsrFykPQb+qKVlLcAHp1wtVzF3qK8XrXA4W85ayPx61FEY9/6ECzqlTKj7UvGDGoQhvWKCIEgSY8iAFE01ZFXTVB0VtmEE8GPi1+RX/BkBVOaaIKoKaiBZFCUkaMggUMchamWo6bA4yoWeAwmKdkHDgiVJ5pVgBA/CaMZrroc0cjIqiNgGsdEsAVWNhMxNRFYveipyX14F8LZjNC8JYxVVFDRdMwzeRtMwTd5EM8AJnygFeOM05FVBRcVnVVM11/V0HTNoqoLqs17zeokc8WC7mciwO/hRMFjQ6kPBRIHxhq33iH9EKvCG8pS4VNeHEepFYUm8+xK2n39UJsqyrsI+SapnkCVeM4apSDx4nKabpoLNUbGL2JnGR8a+Y2qBV0rXp4vPD69QkQRkjJhB4RssIcynKEowENCCjCm8ZIzCqgSEtaKEnQqZKk5jwMIaMEcwaHLDgdPHS68Pfr3RXB54vzUd8EkLhnH2dREHnzKNF4ojI/A+N2ZQRKsjCvUJYRe7zucER6peHu8pThCXrHrjoT67vAP1CWcS471Hvc1HEYvj4sC/jdGlVMFuahoOLndMYvMboZQpIg4BFo5ZeZ08P3ZTlq0QTq+yPng4wZiLj5XGNw3Iu9YeYjexy1AXeX5ERrYDSH4u7o/EbRosIsp1+3LNILrVSrm/APmsBD+pfYjpGkymUjCpSQxqHxIMgy2+dIliJenPV+UkKALOBHsY1YJANq79CfsCGyQdZIxsJ3vJSX+FCDg9wmGiCESZCZpUQwBtaPqiihrVkImxaIFM0MYhkaTIw6i0RHB0xRkkk2yOoMRtmZ72x6f3Tu/ds3thfm7X7M6ZHVs3j2/3t1fLvUjNW7f0p0K4qNPrcKjKb15GegUrcaNc4K73av25jzVMPw/x0EyLjBtpzrY8V8qVs07W6XP6yn1leqb20tF7L9+vWWY4orQoV93/8Fvf9kDbKBW2RlIzhezmJDt8fOb4tTuzKSVvNhvGY5W9ijbW3z+nqhV4cPiGG4ZvYIM3z+2+BmJRJ27DLTun9l23c3R7N2X9ntvSNDK7Yaezes40/Zk9I8N7ATQxprmmA+103+YthyhcunXL/E+vv37khhtGuB0TyfjaBfYs84mFtrYX1eQ2stmf4FsWSFuXVA5/UEj5CGqAq4qzV0Lq7BXZFT5vScS3bObOkr5SWz7em+h1PC+oh4tCppv2j9FSkkZMoAgmI0kojSHGhAyO3BhwMIMjWeXcVeYp8qPACWwCIsKrnun+px6/YXLyhscbtw9/7VPHj3+KX2r/uOn6doU5MSV9sL98KKXEHEFtv/5CWzzeFgehfvNfzsdv9OeNnHhZ/c5Qvx4LMq29q6tDZ8GYXh4GGo/4kfhrLzg+m9Y+h+NTwfGxiYdS2E1+77OFfJrJAvfo8s3pQaKhQtD4VrGgHzRQCCma90XCAiCiilskgqpQWRLkfQQ1mjSNYJIzfwm2NPvDjbw638IVdWH518m95GciEUq6uzqLKLPZ5lhTNOJFPCS3CAE1mVhoz8ziRRbXl25wNzHtpMVQOgTpch9C+6rr9VWqniT3AUaw6up9A7OzA/SqgV27Vq+n06ufofGaTftX3/m0FFJb6ERT59u67Mm2yGdqNhypnWOVXQOvZLl9sqf2fWiq2ZPBjNnNYrmVveXYAReOvKextzeO5PiLdIFUyBAZJmP+cCuax+GhwYGqCMjGCNhhSong47KlJ+vOEhQ0lEWGK1kQuMAJZIub78hHRLtYp61IXwuVUUjXsbfsra/XBsxOo8JBJpOxANE2mgdPwhUCBadQ7f22ZsmhDaGoxmB6cnm4RxTChqNsWXj4TO3TzIhhlGoo71DFMEBYVM+agvAvAUUyTSeuq9UD/oaZMKp0PRhOnNp05F0VVUs6aGpk7RpBsFzHEoWrHpSZ0MCJE2tfRPkZJ2my0Q/EHeAeAh+nlIxNn0+h9ATrpINvLZ8k69jWbASh0sZwesnSZ1uSsaaIzcyiWOB+GyTpBc4DsFecJHgSX0zc/4usnX3m+a/o1Jh6avc3aEpN6X+ns0Bp9MlEekhL6l95Xmu25ee/qie1oVT8yZFSgGGClJKm39j92SkklV99XrObG/sYft036iOaS5AOv9DcFA1yO809oIwShqoVzcQMto9LI4Ut0ZwdFMJFkiJB/kOdwXd9xlEP4lJugcH6rhB9uvbe2s9BhjMg1/7mnBYI2Nod78Y61YfQ9DK/9vOL8V9/kIe++w61OayeE6TIa/yMTYip9/iaA9zFCAL1G/w7yscN5QavAncivux5bfYTjShsOHYChQlzzaBI8bYLuJKecpq9bAiFSpQyPcDJ7bryciIy3w0jr1Jg7HvxXfEnT916sK5ZnkDNMjX1ZDxe6//E/Xv33v+J+/fs+YN4/MmpqRse/2xD9xy89dSTmIUtN2LxwvczfZSLCygXTaSdDJJZ5At30hnfvg3i3pUQca4DO8n8a1E7jk+fN7Bz1yIHYwpRTgi0hW8ondA1mXGNcDAVopYYFa3oSgKirhg9SOKe48WdlRg02abZdBjRFREtEPcRl+ACcZZQkYWTXngRVX7Sbk4ucnKCArZETAQxM8Q0g/MkaAa3Nk+ft7Dqt/wHq7abzJX/m7q5b+6tb7pud/n/YeW/rM/Sif+f1fIzOlNDQ0DuvOMdb//N37jl5re+5fSpk8dXjl165OD+pcXdiFWGZodmd2zbusUf5dCjB5V/IZ9rbUkm4q4TDmKjEciRJmhKc3+gwzcGUDuu3xG/NA70iAhWehtWtq8XVefr3+1QhO/w5sshzPSy7YC+BvYpZMt9644ME3VQBU1IpL7xhJbdyZbrmCgrOdkxzOC5aNzlPraSax9qr30IL/lcmZ0tr55vcd1UykWF/LMWVMstrteyv5xb/e1cf385R/88V64tTarpiNvhak22bQWCorDRWzgmdA0Kp3uGBr5bGBjMtE+xTb2XycJM1DJvpv/rqUR7e+Kpz/DrZ8q5L30pV36EV3Hea2nxzr/8VPtE7YF8P+IQekiuLefK5Rx8pPZSe9RtQzIccUzEuzrMAJvNR+zSgtDpjrWNtuZTzZDd0C3sGtxg6sG6LoK1e4V5dpYskP1kpz8dDqHlQk5Aqc/V4XgSkIGjDRC4N5hyXs/3A/gBFuS5cHzduL1s1Pbuntw6Mtzd5XVKwSKqSo6RBFTxfIBFQXZzYVnqZmVTwbAx2tetVPE6JlQrSXBKSZnvAqINRyjqsi4j+Je/BaWZpR29dO8nf2M51gTX1x4Un4JrFpKRxUsPjbAAQtcNpUJKtlXLCYOgZzNdhULMZNJXHguJZjHfFYzuHhWCvb0bh0a6WgT7uZETHT6Dq4G29kaaxeLgpsE2wUTcIor9/+Sm9VrNVFNDo53A1HisNZGwVUFdOHlsC1MTibZcWzquehnDaD8xt1UQ738/khOJ819djH6y9wbOPajKbY5Cjqy9wM6xFNFxwWRJD+KFWXIJOUXe799DIMhxAEG1HuLeYrpE9AgoAV1ZIgEPTDFgIkbFzsgco8o22nxErQ4gIZ0jSAAniGUZcy7UPfVHj8zvmvBLG/KtsahpUHJy5cipo1fvX9x1yfwl27b6sxM7h6obxkvjne2tPfmeVCKajWUjIcMzPUUkOtWjdViFhg0Xhou441XP7JeEc/cfX1+Ns3CYjq9F7lsvIXzBpRT6P8Szs7UXArYdgBS/vonn1Z9eaBsYaOOXf+SBF+qXNwbRs3bMxu+5xm2NvOYVjjTS8wv4F0sJ2KvkF4dfPMPViWa2uz6Lw+SMrw60B5DTUo6Y+eFLvtGHIJetSIj/cJUs821UQdzDARNaZND4yYi2NyTi2JhLAOfgfO3wPUGB7wla0WhPdyEfzeJEeTE5VOSUAqFSfw9w+JevjAPHIG6E5PurwLfJ+MEsxEvj4HJsWD/fwp1mnixF2J8e7ryx/Fw4fMDut5+L2Z2HB84N7B9cPZizwbLLebv2k/DqfruMcZHi4sBDA5cNDFxSvKn8nA13He60Y8/ZZcxqP1e+sfPw4OD+gYdqD+fLYQja+bJd+5/21H4ed1PxkgHM+NDAYjHCczQwV3BthP2ExZFrbCDT/lQcmNgDMtuAXBaRmIhoR6wPB5Epkzm5RU2zt65EEDwTTdiIbKATzUE2k26OOXaDA6hv5AD8LEK2fnSTq+sxqCI7RY4a8Rpbgw6bXr1889Gjm+kH8fq5ztZsR26qL3KoHE1kpUsffJDJtpfo72fxo5tfSffSi46iRIulnp8cDUWaNpcfvOm8r4V1M3Nlo28tuLa/wybQBLaSTr89oqO+BI70+d7oyit7o/VdUY6DbSc3HEZIpuIcysD3L8fh5T6sb2EC2pv6Fjj7m9rx2FSsdrnG2Vxgcxs9m+82VT2oqkLt7IXSwRL8CHzHqT2LRJEpeu1tbQPlItxuyAEtVju76dMt3d0t2IgA8UmOPUOfQYR5cW93G9mBemie7EHRO4og8t3+7ccPUaJddnQBFRI/CrJdlGHXzmkc1tmZHWlDFKQWk3t9/BOXHtwvaGM6SjTTZqjB97fJDAFTDTBZAnkR2TXhLq1FHkfYPPIgwrbu3ZvPA1lZPnJ479LepX2L+fZ8e1sh3uy54RB3UpEc5LivsoTkje/B8PNXaGipzN0SWb6X0E0L+WrdHeH0lYXGXnE3rO8ZV9bv7vo9LXtyQS5UC1WvytPn8rLDDxXm6tdyHuSO7U3fjE51TB1XC7JTSidnp6Kh/xFqmtqVTPU5UkFd+ekEtMaDUhP+rli/X/wNxoNyFO+rPx/qKnQPxysdHR3lr09A297lVGZL36rdtyWTWqbXFtKp1uNTidjdj7qeRI88qMab1Y9eSpG0fezu5uTU8UcKhYQUTVj4m8QfFpq4hFeAhafWw7uHm9GGdlQSlY6FQuFHHR19gZ49e3oCfcWGXppY+xL7AhtDkYuiZtrhb8tmmhi390hpfAHIKJFknBe2QlSigKrwM7EygWkkQbjmGH8FMitwySWbUi1uOhQOZzjZ9ooi3xJNZ0P92YwcyoYLuKL44LkOcOzVOKYB7Nln6ecvHNruXGDsYbrx5pPlsdWpobkh/I7QW1bfAfO3batdS0cmfvOKickb4ffbqtVdqGPXuc9fs0tZFZuSJDNPJRXupvMbeyMud9egLljhqhcFaKmxU9Xsx1+OoPT46x03S58ZyNlhTtn4gYmIWwKuFbP1vZKLlsgD7AApjhSLI/Q9Tu37bjLp1I67yWLyx8ltLnzYoZfyuOIaSbq17zsOfNjdlvxxohPfTrjJ+pjvXxtgj6NNN3Hlj5K7/WAvjmGmhYoCR0oypzcJ7EOBcLCtapSJ7CSRdYmKTBaX6sfisL0EDbgg6AJ2qqOekqChlwVx5VfkgI1LfnMiHrRGBovtbfn4aGI01oT0vDnY3Ov0GqFiLpTmaydUR7/ZtNgwtXWQ7BQQzG6o9PaXx2AYQnXPnxPppV6k7gssDUMZ0nRZ0oNBnbHVj9DL8cm1Vs9PJovYgmIyHC5vx5ZsLTFwKUta+qqnB//M0pe1YFDbVi63JyljiXaWnO7HZKunF4BBaZvADYFKzpIj7Bw9t46DUF+SLlImFTJG3uqfaQUCXcBoBYEhWgXOSYgu6icJGEBkbh9lolBZWQoAGlCV010VbYOqLZlQt5x4u2g6G/BnbHRosNzfu6Gz2FZ4I9jhiibNzwMgI0AxEevXvnqI/KpnuHhYyXvDA5ylpI5O+JU2boFXBTWeV/v8fH8+3x97zY36r8EjL6zDknMxHpl/7a0ub6/4LSwct+3+ZMQOMVFCUyNTicrSSt0jLC5j/1EGEXlw9/nyRYfnK4tknhe2tTXbihXaQcUtCuueDZKSgm6qEhTRWg42nC49Fweoyq/c4fQaR8fzjTPlL64+AlR4SIvZ6gnoNcNhs/aVy9WwGVAftvz1pD+vvZcOrp9B/12QMLUd047bzeGTPNtDFvnlfZT4GXnsExU408DVIC2jOqOSvIyqCwHE8sVz6L9GH+XefGGQ7zdLkRZYn2y5fqgKEdUv7OOjTHhIbba147Wv1qFo3+WaHQho535hD++XhHNquFk9gVN6kud60Kr7zGDtvWyNnSbTpMfvHKmWOtsyCYNvY/r1Xd+Trz9BNTXpjxfbI4JVtCNhnJExOoIqTOpGBkXX/+uiG6r91TznSx7Xy2MUKVPdZ8jRtpOkfZUwP1+VMSk8+yFJERnkhlJNmkKV1rBcGs/s1pLXnoaqi5Yorg9Nbh0OtGyKxyIDp9/SCaDID/zR3B3PfO2ZO+bg2o/VftaPa1sWVNgnqHbcizIzZsmxg31OWzJy66HF8Y2TrNlWUQ/YUTY57u87eKvTMXYWkBZJ/aA9ceKZd8/tuuOZ1/jgktwHlwwHrV/pg0u4r/HBAV98PTAI+UJ/vjc/Xke+Frxm3q6rO99wJBXrHIqYdsernXC1Z+vuN4Z2L2I1HHJ1/UTWPo6o7ePcKKKOanjGm0kLyfDdmQxqGfBTIKVRSY0HASyV1rGOCVIA+O7ZooGcE/i6W8QBRtNGp/md8vPPlGwihLszuDsbzWeEO7MtM2Domsq39wS+yRwKWcUmSIf4iafy+g9f0/ar3sVQTiAvXThb/1C/hiWvv6xewIXw8VUsaNVvBJyl+Gt8ECw28OoQUo/P0T9CpNBLRv0hEagqoPRRWJIVyhfPDL8TNsfxONuCLJv0dLXlWhJNvbFeO6ihCJEoRDXuh+H/olFp+EsaB6oalib3iwKLaHrZ0NnTs/zA5eJ9e6fLZ8vT0zWdv+69f/21fPY03Dp7OlfO771vcY3UQ8rTF173Pnsa+3GEpNgL9AWcoR4y4g+qgsKI2DgLLQHKKZ2R+B7inIwTgt2IUtLRlsumW6I9sZ5wMKCrMvGoV+/GRUpaP+XS2AhDMpH+JeFwpNHSa3bxpt/++Wn48nrTZ9cD6AvrzcxVcp+/HV5p9svvOEdXr32BvZ9+FyUtQ8ZJxe8bz2IP+EYjiqXI/ytOIiIqP/5vNqT+70BkroHQtlTyQ539dlh2iq3rIEx0Zf6PbdyFXqijnCrCHFQJ+H0lihXqVJxHuQJCbg+2+Qd8/wAcA10LzZgOBJ5+h2kbqsUOPDExMaNAK0YE5y0HpJVHv3WzGdE1i34QQldcfrO8/6DvH/T/c9AwbPMdnwvgOpoJ4pjOTEw8cQCCuhGxbvr2IyuKY80FdU256YrLaz/+ACH/G/3buR8AeJxjYGRgYABiiZrIvHh+m68M8iwMIHC17VQGgv6vwzKJuQHI5WBgAokCACBUCogAeJxjYGRgYG74r80QwzKZgeH/P5ZJDEARFKAOAIF9BV14nGNhgADGUAYG5pcMOiwMDA4sDIwgmgGIPVlcwDQIGwNxLhBnA7EFVEwIiK1YJgPZWQz+QH28QL4XELcDsRMQ2wOxM5R2hJgN1ufAEsvACKQToHwBIJaHyjuyMILFohgaGByAkBGIgbYwJDDkAQANWgyJAAAAAAAAAAAAATwBrgICAlIC5AMOBGIEnATABjgG3AdUCCQJRAosCwQLVg3YDgoOug9KD/AQahDGERARdhNWFAAU5BWAFe4WQhcwF44X6hiEGSIZlBoEGoga1BtGG6ocChyGAAAAAQAAADABjgANAAAAAAACAEIAUABsAAABBwJNAAAAAHicfZA9boNAEIUf/kGOlMJKm2ZEGrtYtCAsG7uMgqu06S0bbCQHJMA/V0gOkCY5Q9pcL4/1pklh0M5+u/OYeQOAW3zAQfs4GODOcgcuxpa7eMDZco+ab8t9PDmPll0MnE8qnd4Nb4bmq5Y7rH9vuYsE2nKPmi/Lfbzjx7KLofOGHGuUKJCZ2AD5uiyysiA9I8WGggNeeUg3+YF7YnXtXmFLiSCEz26COdf/epfbGApTrpC6gISEHZKy2qYS+lrm8teVGKupCnVA0RVvL2xcoaakTQmLthYWpIZvhhVdN8ztqLjYGOFIhU8rEX+30MyecWaoYpyYERSWZiBtT2dTOzJ8YvSY98wpM7GmlbSq87KQwNcLaZpsdWjKXc5RRkftx9FY1F5moiqZaFFLCTW3swSRqJN4S09UJqq+NuwvOElYwAAAAHicfU/XbsMwDMwlluOs7r33DtB+T59khbbVyJKjgbT5+lpBn0uAxIE83pGdbuf/eG8TnW7nE130kIAhRR8ZBhhihDEm2MAmtrCNHexiD/s4wCGOcIwTnOIM57jAJa5wjRvc4g73eMAjnvCMF7ziDdO+X0rvyWYFF5QbM2dCGTEfOypr0r7gQXnGRRF0Jrin0tifpOZSRZqj/pfk2lWhrwyfSV0yV3FLbEkyN2xVySqkLf6WOsulkjGTnIt5d7FgjeKa0tKYUhFztVSUzkzIuWaR8ZH6EAU3rAl6ZmVZ+UIqlTriVlTtKYr0jFu2WBlNiZLOt0XP2606VzapTE29xjVZbFIrNGysFDT1vHRJ/DJxxvqRkFYomioq/PgPr63SUvoq5JO1eZxG76QtdbYIZs0fRLAm96xzv9uqeolLuADIUlixAQGOWbkIAAgAYyCwASNEILADI3CwDkUgIEu4AA5RS7AGU1pYsDQbsChZYGYgilVYsAIlYbABRWMjYrACI0SzCgkFBCuzCgsFBCuzDg8FBCtZsgQoCUVSRLMKDQYEK7EGAUSxJAGIUViwQIhYsQYDRLEmAYhRWLgEAIhYsQYBRFlZWVm4Af+FsASNsQUARAAAAA==) format("woff")}[class^=icon-]{font-family:iconfont!important;speak:none;font-size:16px;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-calendar:before{content:"\E667"}body{color:#1a1a1a;font-family:lucida grande,lucida sans unicode,lucida,helvetica,Hiragino Sans GB,Microsoft YaHei,WenQuanYi Micro Hei,sans-serif;font-size:1rem;line-height:1.75}body{background:#eaeaea}#container,body,html{height:100%;overflow-x:hidden;overflow-y:auto}#container{position:relative;min-height:100%}.body-wrap{margin-bottom:80px}.mid-col{position:absolute;right:0;min-height:100%;background:#eaeaea;left:300px;width:auto}.left-col{background:#fff;width:300px;position:fixed;opacity:1;transition:all .2s ease-in;height:100%;z-index:999}.left-col .overlay{width:100%;height:180px;position:absolute}.left-col .intrude-less{width:76%;text-align:center;margin:112px auto 0}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-button{width:0;height:0}::-webkit-scrollbar-button:end:decrement,::-webkit-scrollbar-button:start:increment{display:none}::-webkit-scrollbar-corner{display:block}::-webkit-scrollbar-thumb{border-radius:8px;background-color:rgba(0,0,0,.2)}::-webkit-scrollbar-thumb:hover{border-radius:8px;background-color:rgba(0,0,0,.5)}::-webkit-scrollbar-thumb,::-webkit-scrollbar-track{border-right:1px solid transparent;border-left:1px solid transparent}::-webkit-scrollbar-track:hover{background-color:rgba(0,0,0,.15)}::-webkit-scrollbar-button:start{width:10px;height:10px;background:var(--sf-img-2) no-repeat 0 0}::-webkit-scrollbar-button:start:hover{background:var(--sf-img-2) no-repeat -15px 0}::-webkit-scrollbar-button:start:active{background:var(--sf-img-2) no-repeat -30px 0}::-webkit-scrollbar-button:end{width:10px;height:10px;background:var(--sf-img-2) no-repeat 0 -18px}::-webkit-scrollbar-button:end:hover{background:var(--sf-img-2) no-repeat -15px -18px}::-webkit-scrollbar-button:end:active{background:var(--sf-img-2) no-repeat -30px -18px}.archive-article-date{color:#999;margin-right:7.6923%;float:right}.archive-article-date .icon{margin:5px 5px 5px 0}.tools-col{width:300px;height:100%;position:fixed;left:0;top:0;z-index:0;padding:0;opacity:0;-webkit-overflow-scrolling:touch}.tools-col .tools-section,.tools-col .tools-wrap{height:100%;color:#e5e5e5;width:360px;overflow:hidden;overflow-y:auto}.tools-col .tools-section ::-webkit-scrollbar,.tools-col .tools-wrap ::-webkit-scrollbar{display:none}.tools-col .tools-section .search-wrap{width:310px;margin:20px 20px 10px;position:relative}.tools-col .tools-section .search-tag.tagcloud{text-align:center;position:relative}.tools-col .tools-section .search-ul{margin-top:10px;color:rgba(77,77,77,.75);-webkit-overflow-scrolling:touch;overflow-y:auto}.tools-col .tools-section-friends{padding-top:30px}.tools-col .aboutme-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;color:#fffdd8;text-shadow:1px 1px rgba(77,77,77,.45)}@-webkit-keyframes cd-bounce-1{0%{opacity:0;-webkit-transform:scale(1)}60%{opacity:1;-webkit-transform:scale(1.01)}to{-webkit-transform:scale(1)}}@keyframes cd-bounce-1{0%{opacity:0;-webkit-transform:scale(1);transform:scale(1)}60%{opacity:1;-webkit-transform:scale(1.01);transform:scale(1.01)}to{-webkit-transform:scale(1);transform:scale(1)}}.article{margin:30px;position:relative;border:1px solid #ddd;border-top:1px solid #fff;border-bottom:1px solid #fff;background:#fff;transition:all .2s ease-in}.article img{max-width:100%}.article-inner h1.article-title{color:#696969;margin-left:0;font-weight:300;line-height:35px;margin-bottom:20px;font-size:26px;transition:color .3s}.article-header{border-left:5px solid #4d4d4d;padding:30px 0 15px 25px;padding-left:7.6923%}.article-inner p{margin:0 0 1.75em}.article-inner{border-color:#d1d1d1}.article-inner h1{font-size:1.75rem;line-height:1.25;margin-top:2em;margin-bottom:1em}.article-inner h2{font-size:1.4375rem;line-height:1.2173913043;margin-bottom:1.2173913043em}.article-inner h1{font-weight:900}.article-inner h1:first-child,.article-inner h2:first-child,.article-inner h3:first-child,.article-inner h4:first-child,.article-inner h5:first-child,.article-inner h6:first-child{margin-top:0}.article-inner h1:first-child{margin-bottom:10px;display:inline}.article-entry{line-height:1.8em;padding-right:7.6923%;padding-left:7.6923%}.article-entry p{margin-top:10px}.article-entry li code,.article-entry p code{padding:1px 3px;margin:0 3px;background:#ddd;border:1px solid #ccc;font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;word-wrap:break-word;font-size:14px}.article-entry ul li:before{content:"";width:6px;height:6px;border:1px solid #999;border-radius:10px;background:#aaa;display:inline-block;margin-right:10px;float:left;margin-top:10px}.article-entry ul{font-size:14px;margin:10px 0}.article-entry h1{margin-top:30px}.article-entry h2{margin-top:20px;font-weight:700;color:#574c4c;padding-bottom:5px;border-bottom:1px solid #ddd}.wrap-side-operation{position:fixed;right:40px;bottom:50px;z-index:999;font-size:14px}.mod-side-operation{width:40px;text-align:center}.jump-container{position:relative;cursor:pointer;width:40px;height:40px;opacity:.8}.jump-plan-container{position:absolute;left:-4px;width:50px;height:61px;overflow:hidden}@-webkit-keyframes pulse{0%{-webkit-transform:scale3d(.5,.5,1)}to{-webkit-transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scale3d(.5,.5,1);transform:scale3d(.5,.5,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}#footer{font-size:12px;font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;text-shadow:0 1px #fff;position:absolute;bottom:30px;opacity:.6;width:100%;text-align:center}#footer .outer{padding:0 30px}.footer-left{float:left}.footer-right{float:right}@media screen and (max-width:800px){#container,body,html{height:auto;overflow-x:hidden;overflow-y:auto}.body-wrap{margin-bottom:0}.left-col{display:none}.mid-col{left:0}.mid-col{position:relative}.wrap-side-operation{display:none}.tools-col{left:-300px;width:300px}.tools-col .tools-wrap{padding-top:48px}.tools-col .tools-section,.tools-col .tools-wrap{width:300px}.tools-col .tools-wrap .search-wrap{width:280px}.tools-col .tools-wrap .search-tag.tagcloud{margin-right:-30px}.mobile-mask{width:100%;height:100%;position:fixed;top:0;left:0;background:rgba(0,0,0,.85);z-index:999}.btnctn{position:fixed;width:50px;height:50px;top:-5px;z-index:4}.article-header{border-left:0;padding:0;border-bottom:1px dotted #ddd}.article-header h1{margin-bottom:10px}.article-header .archive-article-date{float:none}.article{padding:10px;margin:10px 0;border:0;font-size:16px;color:#555}.article .article-entry{padding:10px 0 30px}.article .article-inner h1.article-title{font-size:18px;font-weight:300;display:block;margin:0}#footer{position:relative;bottom:0}#footer .footer-left{float:none;margin-bottom:10px}#footer .footer-right{float:none}#mobile-nav .overlay{height:110px;position:absolute;width:100%;z-index:2}.header-menu.tools-nav ul{margin-right:28px}.header-menu.tools-nav ul{border-color:#fff}.header-menu ul{text-align:center;cursor:default;display:-webkit-box;display:-ms-flexbox;display:flex;margin:0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around;position:relative;z-index:1;border:1px solid #a0a0a0;border-radius:3px}}@-webkit-keyframes clockwise{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes clockwise{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes donut-rotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}50%{-webkit-transform:rotate(-140deg);transform:rotate(-140deg)}to{-webkit-transform:rotate(0);transform:rotate(0)}}@keyframes donut-rotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}50%{-webkit-transform:rotate(-140deg);transform:rotate(-140deg)}to{-webkit-transform:rotate(0);transform:rotate(0)}}.pswp *{box-sizing:border-box}.pswp__bg{background:#000;opacity:0;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-backface-visibility:hidden}.pswp__bg,.pswp__scroll-wrap{position:absolute;left:0;top:0;width:100%;height:100%}.pswp__scroll-wrap{overflow:hidden}.pswp__bg{will-change:opacity;transition:opacity 333ms cubic-bezier(.4,0,.22,1)}</style>
<link rel=icon href=><style>.sf-hidden{display:none!important}</style></head>
<body>
 <div id=container q-class=show:isCtnShow style=height:947px>
 <canvas id=anm-canvas class="anm-canvas sf-hidden" width=1680 height=947 style='background-blend-mode:normal!important;background-clip:content-box!important;background-position:center center!important;background-color:transparent!important;background-image:url("")!important;background-size:100% 100%!important;background-origin:content-box!important;background-repeat:no-repeat!important'></canvas>
 <div class=left-col q-class=show:isShow>
 
<div class=overlay style=background:#4d4d4d></div>
<div class=intrude-less>
 
</div>
 </div>
 <div class=mid-col q-class=show:isShow,hide:isShow|isFalse>
 
<nav id=mobile-nav class=sf-hidden>
 <div class="overlay js-overlay" style=background:#4d4d4d></div>
 <div class="btnctn js-mobile-btnctn">
 
 </div>
 <div class=intrude-less>
 
 </div>
 <div class=mobile-mask style=display:none q-show=isShow></div>
</nav>
 <div id=wrapper class=body-wrap>
 <div class=menu-l>
 <div class=canvas-wrap>
 <canvas data-colors=#eaeaea data-sectionheight=100 data-contentid=js-content id=myCanvas1 class="anm-canvas sf-hidden" style='background-blend-mode:normal!important;background-clip:content-box!important;background-position:center center!important;background-color:transparent!important;background-image:url("")!important;background-size:100% 100%!important;background-origin:content-box!important;background-repeat:no-repeat!important'></canvas>
 </div>
 <div id=js-content class=content-ll>
 <article id=post-Mysql_On_Kubernetes引发的TCP超时问题定位 class="article article-type-post" itemscope itemprop=blogPost>
 <div class=article-inner>
 
 <header class=article-header>
 
 
 <h1 class=article-title itemprop=name>
 MYSQL On Kubernetes(IPVS)引发的TCP超时问题定位
 </h1>
 
 
 <a href=https://berlinsaint.github.io/blog/2018/11/01/Mysql_On_Kubernetes%E5%BC%95%E5%8F%91%E7%9A%84TCP%E8%B6%85%E6%97%B6%E9%97%AE%E9%A2%98%E5%AE%9A%E4%BD%8D/ class=archive-article-date>
 <time datetime=2018-11-01T04:26:13.000Z itemprop=datePublished><i class="icon-calendar icon"></i>2018-11-01</time>
</a>
 
 </header>
 
 <div class=article-entry itemprop=articleBody>
 
 <h1 id=MYSQL-On-Kubernetes-IPVS-引发的TCP超时问题定位><a href=#MYSQL-On-Kubernetes-IPVS-%E5%BC%95%E5%8F%91%E7%9A%84TCP%E8%B6%85%E6%97%B6%E9%97%AE%E9%A2%98%E5%AE%9A%E4%BD%8D class=headerlink title="MYSQL On Kubernetes(IPVS)引发的TCP超时问题定位"></a>MYSQL On Kubernetes(IPVS)引发的TCP超时问题定位</h1><h2 id=背景><a href=#%E8%83%8C%E6%99%AF class=headerlink title=背景></a>背景</h2><ul>
<li>以下数据库上Kubernetes都是研发、测试环境，非生产环境</li>
</ul>
<p>我们研测测试环境的数据库如 Mysql ，redis ，rabbitmq都以容器的方式在我们自研的paas平台上创建；</p>
<p>但是当我们把mysql已到k8s上时， 我们经常发现MYSQL 的error日志爆出如下错误:</p>
<p><img src= alt="Alt text"></p>
<p>然后我们的客户端则会经常报 <code>Lost Mysql Connection错误</code>, 重试后，连接恢复；</p>
<p><img src="" alt="Alt text"></p>
<p>对于该问题，我们首先思路是排查我们代码上是否存在未正常关闭连接， 同时，我们也部署了另一套非容器的 mysql环境，相同代码下，非容器mysql的表现的非常问题，没有一条Aborted记录，因此我们怀疑一定中间某个网络环节导致了该问题。</p>
<p><code>Percona</code> 社区写了一篇比较好的文章，这篇文章有必要阅读下，因为这种错误原因是不确定的。</p>
<p>地址是 <code>https://www.percona.com/blog/2016/05/16/mysql-got-an-error-reading-communication-packet-errors/</code></p>
<p>但是并没有给出这类问题的根本原因，或者说导致该错误的原因其实可能有多种。</p>
<p>由于是基本确立问题范围出现在 docker网络，所以我们必须要深入了解下 kubernetes 1.11上的 <code>IPVS</code> 模式原理。</p>
<p>Kubernetes ipvs 基于 LVS-NAT模型，基本流程如下图:</p>
<p><img src="" alt="Alt text"></p>
<ul>
<li>当用户请求到达Director Server，此时请求的数据报文会先到达内核的PREROUTING链，此时报文的源IP是CIP，目标IP是VIP（K8S 每个node都会有该VIP子接口，名为kube-ipvs0，为虚拟接口）。</li>
</ul>
<p>在Kubernetes里，这里的<code>VIP</code>就是 <code>ClusterIP</code>, 熟悉kubernetes的原理可知该VIP是kubernetes Service，本身就是个负载均衡地址，且各个节点都会监听 VIP的连接, 当用户请求到达<code>DS</code>， 这一过程在k8s上体现为流量打到 <code>Service</code> 为 <code>VIP</code>上， DS是谁呢？ 每一台K8S <code>node</code>都是 <code>DS</code>. 这要看我们是谁去访问SVC， 在我们的case中, <code>Mysql SVC</code> vip为<code>10.101.219.112</code>; 访问 <code>Mysql SVC</code>的是我们的后端 <code>Pod</code>, 我们的 Client Pod 的 PodIP 为 <code>192.100.183.187</code>; 我的 <code>RS</code> POD IP为 <code>192.100.111.84</code></p>
<ul>
<li>PREROUTING链检查发现数据包的目标IP是本机，将数据包送至INPUT链。</li>
</ul>
<p>iptables命令是查不到的INPUT这个规则的，因为是ipvs的缘故, 使用 <code>ipvsadm -ln</code> 可以查看到如下规则:</p>
<p><img src= alt="Alt text"></p>
<ul>
<li><p>POSTROUTING链通过选路，将数据包发送到Real Server(这个我们不好看到，因为内核态或者有没有好的办法可以告知我。)</p>
</li>
<li><p>Real Server比对发现目标IP是自己的IP，开始建立响应报文发回给Director Server，此时报文的源IP是RIP，目标IP是CIP. 我们这里CIP就是 <code>192.100.183.187</code></p>
</li>
<li><p>Director Server在响应客户端之前，此时会将源IP地址修改为自己的IP地址，然后响应给客户端，做SNAT转换。此时报文的源IP是VIP （<code>10.101.219.112</code>）。目标IP是CIP。</p>
</li>
</ul>
<p>至此 IPVS原理结束。</p>
<p>回到问题， 我们的问题其实遇到比较长时间了，大概一个背景就是，连续使用问题不大，不会报错，但是搁置一段时间后去访问， 就会出现一些异常（我们web上体现到一些查询查不到数据）， 所以我们怀疑网络拓扑中存在这连接超时的问题，究竟哪一块有超时呢？我决定抓包。</p>
<p>在哪抓， 我们客户端是 我们一个后端，当它启动时，如果有查询任务，肯定是向mysql 发起请求连接的， 所以我们查到该 Client所在 Node上，宿主机上执行tcpdump;</p>
<p>我们的是calico网络， 需要抓 <code>tunl0</code>网卡流量；</p>
<p>命令如下(幸好第一份工作做网络的。。。。):</p>
<p><code>tcpdump -i tunl0 host 192.100.111.84 -s0 -w client-mysql.pcap</code></p>
<p>注意不用指定src dst，那样只能抓到单向报文。。</p>
<p>同时我们的 client发起一个mysql查询请求， 并另开一个shell 在该node执行 <code>ipvsadm -lnc</code></p>
<p>结果如下:<br><img src="" alt="Alt text"></p>
<p><img src="" alt="Alt text"></p>
<p>这个图。。。。</p>
<p>第二列 ，很可疑。。。expired date。。。。。超时。。。，先不管，证明我们的猜想。。继续往下走，不断执行该命令， 第二列在减少，看起来默认是15min，那么这15min我client不再做任何查询，等等吧。。。。</p>
<p>waiting。。。<br><img src="" alt="Alt text"></p>
<p>还有5分钟， 好紧张</p>
<p>我们想抓到到15min那时候， 会发生什么， 然后client再去查询，会不会触发 mysql的错误以及client的错误(文初的错误)</p>
<p>时间到:<br><img src="" alt="Alt text"></p>
<p>我凑， 看起来该链接被清掉了，这时候我们去执行一条查询看看；</p>
<p><img src= alt="Alet text"></p>
<p>我们再看看抓包情况:(我是在POD所在节点宿主上抓的跟数据库交互的报文，然后没有抓到连接被RST的报文略疑惑，lvs清空连接对连接本身究竟了做了什么操作仍需要关注。。)</p>
<p><img src="" alt="Alet text"><br>在此之后，查询时候又会新键连接， 即没有任何征兆该链接就被断开了，按理说client使用 mysql connection pool 连接复用是不会轻易就更换连接的。</p>
<p>基本确定了问题， 看起来是 ipvs 维护 VIP的这条链接存在15min左右的超时阈值设定，这个值是否跟系统默认的<code>tcp_keepalive_timeout</code> 有协同影响？ 那么系统的默认tcp超时时间是多少呢？</p>
<p>确立这个思路，查阅资料(基于15min ipvs为关键词)：</p>
<ul>
<li><code>https://github.com/moby/moby/issues/31208</code></li>
<li><code>https://success.docker.com/article/ipvs-connection-timeout-issue</code></li>
<li><code>https://access.redhat.com/solutions/23874</code></li>
</ul>
<p>基于上述资料，基本可以分析到， ipvs维护链接有个超时时间，默认为900s为15分钟；然后操作系统默认的tcp_keepalive_timeout 默认为7200s，当一个空闲 tcp连接达到900s时，首先他被ipvs断了，但是操作系统认为该链接还没有到保活超时，所以客户端还会使用之前的连接去发送查询请求，但是ipvs已经不维护该链接了，所以 Lost Connection。。所以只要减小系统的tcp_keepalive_timeout时间，比如到600，后发送一个心跳包，让tcp保活， 这样， ipvs的连接超时也会被重置计数为15min。</p>
<p>我紧急基于上述资料做了k8s node全量修改配置：</p>
<p>playbook如下:</p>
<p><img src= alt="Alet text"></p>
<p>k8s.conf如下:</p>
<p><img src="" alt="Alet text"></p>
<p>关于这三个参数解释下:</p>
<p>当启用与内核参数或守护程序端配置或客户端配置相关的选项时，它将根据这些选项终止tcp会话。<br>例如，当您将以上述内核参数选项视为示例时，首先将在600秒后开始发送keepalive数据包，之后每隔30秒发送一次下一个数据包10次。<br>当客户端或服务器在这段时间内根本没有应答时，tcp会话将被视为已损坏，并将终止。</p>
<ul>
<li>为什么我们要设置为600s呢， 其实只要比 ipvs的默认值900小即可！</li>
</ul>
<p>经修复后， 断链问题基本解决， 数据库的 <code>error communication packget</code> 报文基本不再复现， 多么痛的领悟。。</p>
<p>抓到如下报文(修改后ip等数值与上文不一样,发生了变化):</p>
<ul>
<li>（可以清楚看到13:33 道13:43 期间连接无数据，但是10分钟到了，里面有一个KeepAlive报文,修改之前linux 这个值默认是7200s也就是2小时！）</li>
</ul>
<p>我们可以在 <code>https://access.redhat.com/solutions/23874</code> 看到一些解释</p>
<p></p>
<ul>
<li>该client的数据库连接池的连接被保活而不是被ipvs clear掉。</li>
</ul>
 
 
 
 
 </div>
 
 </div>
</article>
 
<aside class=wrap-side-operation>
 <div class=mod-side-operation>
 
 <div class=jump-container id=js-jump-container style=display:none>
 <a href=https://berlinsaint.github.io/blog/2018/11/01/Mysql_On_Kubernetes%E5%BC%95%E5%8F%91%E7%9A%84TCP%E8%B6%85%E6%97%B6%E9%97%AE%E9%A2%98%E5%AE%9A%E4%BD%8D/ class=mod-side-operation__jump-to-top>
 
 </a>
 <div id=js-jump-plan-container class=jump-plan-container style=top:-11px>
 
 </div>
 </div>
 
 
 </div>
</aside>
 
 
 
 
 
 
 </div>
 </div>
 </div>
 <footer id=footer>
 <div class=outer>
 <div id=footer-info>
 <div class=footer-left>
 © 2020 ybyang2
 </div>
 <div class=footer-right>
 <a href=http://hexo.io/ target=_blank>Hexo</a> Theme <a href=https://github.com/litten/hexo-theme-yilia target=_blank>Yilia</a> by Litten
 </div>
 </div>
 </div>
</footer>
 </div>
 
 
<div class=tools-col q-class=show:isShow,hide:isShow|isFalse q-on=click:stop(e)>
 <div class="tools-nav header-menu sf-hidden">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 <ul style=width:70%>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 </ul>
 </div>
 <div class=tools-wrap>
 
 <section class="tools-section tools-section-all" q-show=innerArchive style=display:none>
 <div class=search-wrap>
 
 
 
 </div>
 <div class="widget tagcloud search-tag">
 
 
 
 </div>
 <ul class=search-ul>
 
 
 
 </ul>
 </section>
 
 
 <section class="tools-section tools-section-friends" q-show=friends style=display:none>
 
 <ul class=search-ul>
 
 
 
 </ul>
 
 </section>
 
 
 <section class="tools-section tools-section-me" q-show=aboutme style=display:none>
 
 <div class=aboutme-wrap id=js-aboutme>杂技团一员谢谢大家赏脸</div>
 
 </section>
 
 </div>
 
</div>
 
<div class="pswp sf-hidden" tabindex=-1 role=dialog aria-hidden=true>
 
 <div class=pswp__bg></div>
 
 <div class=pswp__scroll-wrap>
 
 
 
 
 </div>
</div>
 </div>
